現在有 1 個數字陣列,目標是找出陣列裡 3 個數字加總為 0 ,這 3 個數字的索引不可以一樣,最後將所有結果輸出成 Array
given_array_nums = [-1, 0, 1, 2, -1, -4]
output = [[-1, 0, 1],[-1, -1, 2]]
準備好 result 加上簡單的測試
given_array_nums = [-1, 0, 1, 2, -1, -4]
output = [[-1, 0, 1],[-1, -1, 2]]
def sum_zero( arr )
    result = []
    
end
def expect(a,b)
    p a
    p a == b
end
準備三個迴圈,迴圈長度就用輸入陣列長度
def sum_zero( arr )
    result = []
    for i in [*0..arr.size]   
        for j in [*0..arr.size]
            for k in [*0..arr.size]
                
            end
        end
    end
    return result
end
把加總為 0 的數字組合收集、排序後塞到 result 中、回傳的 result 要把重複組合去除
ef sum_zero( arr )
    result = []
    for i in [*0..arr.size]   
        for j in [*0..arr.size]
            for k in [*0..arr.size]
                if arr[i] + arr[j] + arr[k] == 0
                    
                    result << [arr[i],arr[j],arr[k]].sort
                end
            end
        end
    end
    return result.uniq
end
現在要去除不需要跑的次數,希望內部迴圈選出的數字不會與外部迴圈相同,所以要改變迴圈的起始值,而且外部迴圈並不需要跑到最後一個數字,依照這個想法,最外部的迴圈只要跑 [0,1,2,3] 這些索引,中間迴圈 [1,2,3,4] 這些索引,內側迴圈 [2,3,4,5] 這些索引
ef sum_zero( arr )
    result = []
    for i in [*0..arr.size-1-2]   
        for j in [*i+1..arr.size-1-1]
            for k in [*j+1..arr.size-1]
                if arr[i] + arr[j] + arr[k] == 0
                    
                    result << [arr[i],arr[j],arr[k]].sort
                end
            end
        end
    end
    return result.uniq
end
今天到此為止,有任何問題請在下方留言或透過email、GitHub聯絡我,感謝閱讀
Daily kitty